/*********************************************************************
 * 
 * 
 * 					sogoodsoft.com专用属性和函数
 * 
 * 
 * 
*********************************************************************/




/*****************************类型选择下拉列表选项****************************
说明：
code 	所需分类的code
id		页面select对象的ID
name	option显示的名称取SysClass对象的哪个字段，一般是"name"
value	option的value取SysClass对象的哪个字段，一般是"id"
currVal	当前选定的option的value
all		显示全部 默认all=true,不显示“全部”,all=false
****************************************************************************/
function typeSelectOption(code,id,name,value,currVal,all){
	var action=ctx+"/common/sys-type-ui!getTypeByCode.action";
	$.ajax({
		"url":action,
		"data":"code="+code,
		"async":false,
		"type":"POST",
		"dataType":"json",
		"success":function(json){
		if(json.error=="true") return false;
		var options="";
		if(all!=false){
			options = "<option value=\"\">"+"全部"+"</option>\n";
		}
		for(var i=0;i<json.type.length;i++){
			if(currVal!=json.type[i][value]){
				options+="<option value=\""+json.type[i][value]+"\">"+json.type[i][name]+"</option>\n";
			}
			else
			{
				options+="<option value=\""+json.type[i][value]+"\" SELECTED>"+json.type[i][name]+"</option>\n";
			}
			
			
		}
		$("#"+id).empty();
		$("#"+id).append(options);
		
	}
	});
}

/*****************************JavaScript Map****************************/
/*
 * MAP对象，实现MAP功能
 *
 * 接口：
 * size()     获取MAP元素个数
 * isEmpty()    判断MAP是否为空
 * clear()     删除MAP所有元素
 * put(key, value)   向MAP中增加元素（key, value) 
 * remove(key)    删除指定KEY的元素，成功返回True，失败返回False
 * get(key)    获取指定KEY的元素值VALUE，失败返回NULL
 * element(index)   获取指定索引的元素（使用element.key，element.value获取KEY和VALUE），失败返回NULL
 * containsKey(key)  判断MAP中是否含有指定KEY的元素
 * containsValue(value) 判断MAP中是否含有指定VALUE的元素
 * values()    获取MAP中所有VALUE的数组（ARRAY）
 * keys()     获取MAP中所有KEY的数组（ARRAY）
 * key值不可重复，重复的，只保存最新的
 * 例子：
 * var map = new Map();
 *
 * map.put("key", "value");
 * var val = map.get("key")
 * ……
 *
 */
function Map() {
	this.elements = new Array();

	//获取MAP元素个数
	this.size = function() {
		return this.elements.length;
	}

	//判断MAP是否为空
	this.isEmpty = function() {
		return (this.elements.length < 1);
	}

	//删除MAP所有元素
	this.clear = function() {
		this.elements = new Array();
	}

	//向MAP中增加元素（key, value) 
	this.put = function(_key, _value) {
		//删除重复
		this.remove(_key);
		this.elements.push( {
			key : _key,
			value : _value
		});
	}

	//删除指定KEY的元素，成功返回True，失败返回False
	this.remove = function(_key) {
		var bln = false;
		try {
			for (i = 0; i < this.elements.length; i++) {
				if (this.elements[i].key == _key) {
					this.elements.splice(i, 1);
					return true;
				}
			}
		} catch (e) {
			bln = false;
		}
		return bln;
	}

	//获取指定KEY的元素值VALUE，失败返回NULL
	this.get = function(_key) {
		try {
			for (i = 0; i < this.elements.length; i++) {
				if (this.elements[i].key == _key) {
					return this.elements[i].value;
				}
			}
		} catch (e) {
			return null;
		}
	}

	//获取指定索引的元素（使用element.key，element.value获取KEY和VALUE），失败返回NULL
	this.element = function(_index) {
		if (_index < 0 || _index >= this.elements.length) {
			return null;
		}
		return this.elements[_index];
	}

	//判断MAP中是否含有指定KEY的元素
	this.containsKey = function(_key) {
		var bln = false;
		try {
			for (i = 0; i < this.elements.length; i++) {
				if (this.elements[i].key == _key) {
					bln = true;
				}
			}
		} catch (e) {
			bln = false;
		}
		return bln;
	}

	//判断MAP中是否含有指定VALUE的元素
	this.containsValue = function(_value) {
		var bln = false;
		try {
			for (i = 0; i < this.elements.length; i++) {
				if (this.elements[i].value == _value) {
					bln = true;
				}
			}
		} catch (e) {
			bln = false;
		}
		return bln;
	}

	//获取MAP中所有VALUE的数组（ARRAY）
	this.values = function() {
		var arr = new Array();
		for (i = 0; i < this.elements.length; i++) {
			arr.push(this.elements[i].value);
		}
		return arr;
	}

	//获取MAP中所有KEY的数组（ARRAY）
	this.keys = function() {
		var arr = new Array();
		for (i = 0; i < this.elements.length; i++) {
			arr.push(this.elements[i].key);
		}
		return arr;
	}
}
/*****************************JavaScript Map****************************/


/*****************************checkbox扩展******************************/
/*
 * 
 * 功能说明：
 * 1、辅助展示checkbox的值，将配对隐藏的input域的值，传给checkbox，展示选中或不选
 * 2、将check选中或不选中的值，传给配对隐藏的input域
 * 
 * 使用方法：
 * 每个checkbox都匹配一个隐藏的input，用ID进行配对。
 * 
 * 规则：
 * 1、ID为someinput_check的checkbox，匹配ID为someinput的input隐藏域
 * 2、checkbox的value="1/2",1为选中时的值，2为不选中时的值
 * 
 * 例如：
 * A、<input type="checkbox" value="1/2" id="sometype_checkbox" />
 * B、<input type="hidden" value="1" id="sometype" />
 * 此时，B的值是1，A选中时的值是1，所以此时处于选中状态
 * 如果页面上，把A的状态调为非选中状态，则B的value将动态赋值为2
 * 
 * 调用方式:
 * $(document).ready(function(){
 *		checkboxPlugin.init("formid");
 *		});
 *
 */

var checkboxPlugin = {
		endOf : "_check",			//结束符,如prop_check,会使用ID为"prop"的input的值，初始化该checkbox
		separator:"/",			//分隔符，如1/2，值为1时，该checkbox会被选中
		reg:new RegExp(),
		init:function(formid){
			var matchValue,matchId;
			var checkedValue,uncheckedValue,arr;
			$("#"+formid).find("input[type='checkbox']").each(function(){
				checkboxPlugin.reg=new RegExp("[\S]*"+checkboxPlugin.endOf+"$","ig");
				var valid = checkboxPlugin.reg.test(this.id);
				//alert(this.id+"="+valid);
				if(valid){
					matchId = this.id.replace(checkboxPlugin.endOf,"");
					matchValue = $("#"+formid).find("#"+matchId).val();
					//alert(matchId+"="+matchValue);
					arr = this.value.split(checkboxPlugin.separator);
					checkedValue = arr[0];
					uncheckedValue = arr[1];
					if(matchValue==checkedValue){
						this.checked = true;
						}
					else{
						this.checked = false;
						}

					//注册事件，同步值到隐藏表单里
					 $(this).click(checkboxPlugin.onCheck);
					}
				});
			},
			
		onCheck:function(){
				var matchValue,matchId;
				var checkedValue,uncheckedValue,arr;
				matchId = this.id.replace(checkboxPlugin.endOf,"");
				matchValue = $("#"+matchId,this.form).val();
				arr = this.value.split(checkboxPlugin.separator);
				checkedValue = arr[0];
				uncheckedValue = arr[1];
				
				if(this.checked){
					$("#"+matchId,this.form).val(checkedValue);
					
					}
				else{
					$("#"+matchId,this.form).val(uncheckedValue);
					}
				//alert(matchId+"="+$("#"+matchId,this.form).val());
				}	
};
/*****************************checkbox扩展******************************/


/*****************************金额大写转换******************************/
function convertCurrency(currencyDigits) {
	// Constants:
	 var MAXIMUM_NUMBER = 99999999999.99;
	 // Predefine the radix characters and currency symbols for output:
	 var CN_ZERO = "零";
	 var CN_ONE = "壹";
	 var CN_TWO = "贰";
	 var CN_THREE = "叁";
	 var CN_FOUR = "肆";
	 var CN_FIVE = "伍";
	 var CN_SIX = "陆";
	 var CN_SEVEN = "柒";
	 var CN_EIGHT = "捌";
	 var CN_NINE = "玖";
	 var CN_TEN = "拾";
	 var CN_HUNDRED = "佰";
	 var CN_THOUSAND = "仟";
	 var CN_TEN_THOUSAND = "万";
	 var CN_HUNDRED_MILLION = "亿";
	 //var CN_SYMBOL = "￥:";
	 var CN_SYMBOL="";
	 var CN_DOLLAR = "元";
	 var CN_TEN_CENT = "角";
	 var CN_CENT = "分";
	 var CN_INTEGER = "整";
	 
	// Variables:
	 var integral; // Represent integral part of digit number.
	 var decimal; // Represent decimal part of digit number.
	 var outputCharacters; // The output result.
	 var parts;
	 var digits, radices, bigRadices, decimals;
	 var zeroCount;
	 var i, p, d;
	 var quotient, modulus;
	 
	// Validate input string:
	 currencyDigits = currencyDigits.toString();
	 if (currencyDigits == "") {
	  alert("请输入要转换的数字!");
	  return "";
	 }
	 if (currencyDigits.match(/[^,.\d]/) != null) {
	  alert("数字中含有非法字符!");
	  return "";
	 }
	 if ((currencyDigits).match(/^((\d{1,3}(,\d{3})*(.((\d{3},)*\d{1,3}))?)|(\d+(.\d+)?))$/) == null) {
	  alert("错误的数字格式!");
	  return "";
	 }
	 
	// Normalize the format of input digits:
	 currencyDigits = currencyDigits.replace(/,/g, ""); // Remove comma delimiters.
	 currencyDigits = currencyDigits.replace(/^0+/, ""); // Trim zeros at the beginning.
	 // Assert the number is not greater than the maximum number.
	 if (Number(currencyDigits) > MAXIMUM_NUMBER) {
	  alert("超出转换最大范围!");
	  return "";
	 }
	 
	// Process the coversion from currency digits to characters:
	 // Separate integral and decimal parts before processing coversion:
	 parts = currencyDigits.split(".");
	 if (parts.length > 1) {
	  integral = parts[0];
	  decimal = parts[1];
	  // Cut down redundant decimal digits that are after the second.
	  decimal = decimal.substr(0, 2);
	 }
	 else {
	  integral = parts[0];
	  decimal = "";
	 }
	 // Prepare the characters corresponding to the digits:
	 digits = new Array(CN_ZERO, CN_ONE, CN_TWO, CN_THREE, CN_FOUR, CN_FIVE, CN_SIX, CN_SEVEN, CN_EIGHT, CN_NINE);
	 radices = new Array("", CN_TEN, CN_HUNDRED, CN_THOUSAND);
	 bigRadices = new Array("", CN_TEN_THOUSAND, CN_HUNDRED_MILLION);
	 decimals = new Array(CN_TEN_CENT, CN_CENT);
	 // Start processing:
	 outputCharacters = "";
	 // Process integral part if it is larger than 0:
	 if (Number(integral) > 0) {
	  zeroCount = 0;
	  for (i = 0; i < integral.length; i++) {
	   p = integral.length - i - 1;
	   d = integral.substr(i, 1);
	   quotient = p / 4;
	   modulus = p % 4;
	   if (d == "0") {
	    zeroCount++;
	   }
	   else {
	    if (zeroCount > 0)
	    {
	     outputCharacters += digits[0];
	    }
	    zeroCount = 0;
	    outputCharacters += digits[Number(d)] + radices[modulus];
	   }
	   if (modulus == 0 && zeroCount < 4) {
	    outputCharacters += bigRadices[quotient];
	   }
	  }
	  outputCharacters += CN_DOLLAR;
	 }
	 // Process decimal part if there is:
	 if (decimal != "") {
	  for (i = 0; i < decimal.length; i++) {
	   d = decimal.substr(i, 1);
	   if (d != "0") {
	    outputCharacters += digits[Number(d)] + decimals[i];
	   }
	  }
	 }
	 // Confirm and return the final output string:
	 if (outputCharacters == "") {
	  outputCharacters = CN_ZERO + CN_DOLLAR;
	 }
	 if (decimal == "") {
	  outputCharacters += CN_INTEGER;
	 }
	 outputCharacters = CN_SYMBOL + outputCharacters;
	 return outputCharacters;
	}
/*****************************金额大写转换******************************/


/*****************************FusionCharts报表参数******************************/
var Column3D = ctx+"/javascripts/FusionCharts/Charts/Column3D.swf";
var Line = ctx+"/javascripts/FusionCharts/Charts/Line.swf";
var MSColumn3D = ctx+"/javascripts/FusionCharts/Charts/MSColumn3D.swf";
var  explorer = ctx+"/FCExporter";
/*****************************FusionCharts报表参数******************************/

/***********************************************************/
/**
 * 从字符串fun(1,76,'sde');解析函数名称fun和参数数组，数组内为字符串
 * 扩展DWZ的A链接功能，使用下面的函数
 */
function funName(fun){
	return fun.split("(")[0];
	}
function funPara(fun){
	var nm = funName(fun);
	var para = fun.replace(nm+"(","");
	para = para.substring(0,para.lastIndexOf(")"));
	para = para.split(",");
	for(var i=0;i<para.length;i++){
		para[i] = eval("para["+i+"] = "+para[i]);
		}
	return para;
	}
/***********************************************************/

